package controller;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Bem;
import model.BemDAO;
import model.Cliente;
import model.ClienteDAO;
import model.Contrato;
import model.ContratoDAO;
import model.Garantia;
import model.GarantiaDAO;
import model.Projeto;
import model.ProjetoDAO;

@WebServlet("/GarantiaControle")
public class GarantiaControle extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public GarantiaControle() {
		super();
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Identificar a operacao
		String operacao = request.getParameter("operacao");
		if (operacao.equals("Pesquisar")) {
			// Obter contrato
			int numero = Integer.parseInt(request.getParameter("contrato"));
			Contrato c = new Contrato(numero);
			ArrayList<Contrato> contratos = new ArrayList<Contrato>();
			ContratoDAO cd = new ContratoDAO();
			try {
				contratos = cd.consultar(c,true);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			// Obter o projeto do contrato
			ProjetoDAO pd = new ProjetoDAO();
			try {
				contratos.get(0).setProjeto(pd.consultar(new Projeto("1211-10"),true).get(0));
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Obter os bens do projeto
			ArrayList<Bem> bens = new ArrayList<Bem>();
			contratos.get(0).getProjeto().setBens(bens);
			BemDAO bd = new BemDAO();
			try {
				for (Bem b : bd.consultar())
					if (b.getProjetos() != null)
						if(contratos.get(0).getProjeto().getReferencia().contentEquals(b.getProjetos().get(0).getReferencia()))
							contratos.get(0).getProjeto().getBens().add(b);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			contratos.get(0).getProjeto().setBens(bens);
			// Guardo no response e despacho
			request.setAttribute("contrato",(contratos.isEmpty())?null:contratos.get(0));
			request.setAttribute("etapaGarantia", "segunda");
			RequestDispatcher view = request
					.getRequestDispatcher("listarGarantias.jsp");
			view.forward(request, response);
		}
		
		if (operacao.equals("Definir")) {
			// Obter contrato
			int numero = Integer.parseInt(request.getParameter("contrato"));
			Contrato c = new Contrato(numero);
			ArrayList<Contrato> contratos = new ArrayList<Contrato>();
			ContratoDAO cd = new ContratoDAO();
			try {
				contratos = cd.consultar(c,true);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			// Obtendo garantias
			String[] lista = request.getParameterValues("garantias");
			ArrayList<Bem> garantias = new ArrayList<Bem>();
			BemDAO bd = new BemDAO();
			try {
				garantias = bd.consultar(lista);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Salvar lista de garantias
			ArrayList<Garantia> busca = new ArrayList<Garantia>();
			GarantiaDAO gd = new GarantiaDAO();
			try {
				gd.excluir(numero, lista); // excluir os que nao estao na lista
				for(Bem b : garantias){
					busca = gd.consultar(new Garantia(contratos.get(0),b));
					if (busca.size() == 0)
						gd.incluir(new Garantia(contratos.get(0),b));
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			// Guardo no response e despacho
			request.setAttribute("contrato", contratos.get(0));
			request.setAttribute("garantias", garantias);
			request.setAttribute("cadastro", "1");
			request.setAttribute("etapaGarantia", "segunda");
			RequestDispatcher view = request
					.getRequestDispatcher("listarGarantias.jsp");
			view.forward(request, response);
		}
		
		if (operacao.equals("Editar")){
			// Obter contrato
			int numero = Integer.parseInt(request.getParameter("contrato"));
			ContratoDAO cd = new ContratoDAO();
			Contrato contrato = null;
			try {
				contrato = cd.consultar(new Contrato(numero),true).get(0);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Obter projeto
			ProjetoDAO pd = new ProjetoDAO();
			Projeto projeto = null;
			try {
				projeto = pd.consultar(contrato.getProjeto()).get(0);
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			// Obter bem
			int id = Integer.parseInt(request.getParameter("garantias"));
			BemDAO bd = new BemDAO();
			Bem bem = null;
			try{
				bem = bd.consultar(new Bem(id),true).get(0);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Obter garantia
			GarantiaDAO gd = new GarantiaDAO();
			Garantia garantia = null;
			try {
				garantia = gd.consultar(new Garantia(contrato,bem)).get(0);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Guardo no response e despacho
			//request.setAttribute("garantia", new Garantia(contrato,bem));
			request.setAttribute("contrato", contrato);
			request.setAttribute("projeto", projeto);
			request.setAttribute("bem", bem);
			request.setAttribute("garantia", garantia);
			request.setAttribute("etapaGarantia", "terceira");
			RequestDispatcher view = request
					.getRequestDispatcher("salvarGarantia.jsp");
			view.forward(request, response);
		}
		
		if (operacao.equals("Salvar")){
			// Obter contrato e bem
			int numero = Integer.parseInt(request.getParameter("contrato"));
			Contrato contrato = new Contrato(numero);
			int id = Integer.parseInt(request.getParameter("bem"));
			Bem bem = new Bem(id);
			// Obter valores informados
			String clausula = request.getParameter("clausula");
			float valor = Float.parseFloat(request.getParameter("valor").replace(',', '.'));
			Garantia garantia = new Garantia(contrato,bem);
			garantia.setClausula(clausula);
			garantia.setValor(valor);
			// Manipular coo o DAO
			GarantiaDAO gd = new GarantiaDAO();
			try{
				gd.alterar(garantia);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// Guardo no response e despacho
			//request.setAttribute("garantia", new Garantia(contrato,bem));
			request.setAttribute("etapaGarantia", "primeira");
			request.setAttribute("cadastro", "1");
			RequestDispatcher view = request
					.getRequestDispatcher("pesquisarGarantias.jsp");
			view.forward(request, response);
		}

	}
}